package portal.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import portal.excepcion.DAOExcepcion;
import portal.modelo.Servicios;
import portal.util.ConexionBD;

public class ServiciosDAO  extends BaseDAO{

	public ArrayList<Servicios> listarServicios(){
		
		ArrayList<Servicios> serviciosLista = new ArrayList<Servicios>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		    try {
				String query = "SELECT idServicio, NombreServicio, descripcionServicio, ROUND(CostoPorPersonaServicio,2), fechaCreacionServicio, fechaModificacionServicio FROM Servicio;";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				
				
				rs = stmt.executeQuery();
				while (rs.next()) {
					
					Servicios servicios = new Servicios(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getDouble(4), rs.getString(5), rs.getString(6));
					serviciosLista.add(servicios);
					
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				try {
					throw new DAOExcepcion(e.getMessage());
				} catch (DAOExcepcion e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return serviciosLista;
	}

	public Boolean insertarServicio(Servicios a) throws DAOExcepcion {
		
		boolean status = Boolean.TRUE;
		String query = "call INSERT_SERVICIO(?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, a.getNombreServicio());
			stmt.setString(2, a.getDescripcionServicio());
			stmt.setDouble(3, a.getCostoPorPersonaServicio());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO INSERTO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

	public Boolean modificarServicio(Servicios a) throws DAOExcepcion {
		// TODO Auto-generated method stub
		boolean status = Boolean.TRUE;
		String query = "call UPDATE_SERVICIO(?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, a.getIdServicio());
			stmt.setString(2, a.getNombreServicio());
			stmt.setString(3, a.getDescripcionServicio());
			stmt.setDouble(4, a.getCostoPorPersonaServicio());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO MODIFICO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

	public Boolean eliminarServicio(Servicios a) throws DAOExcepcion {
		// TODO Auto-generated method stub
		boolean status = Boolean.TRUE;
		String query = "call DELETE_SERVICIO(?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, a.getIdServicio());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO ELIMINO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

}
